/**
 * 全局作用域、函数变量、函数内部作用域
 *
 */

let a = 10
let b = 1


function sum(a, b){
    a = 11
    b = 2
    console.log(a) // 11
    console.log(b) // 2

}

console.log(a) // 10
console.log(b) // 1

// 记住， 普通数据类型传递的是参数的值，不是参数的地址，所以，不会修改参数真正的数据
sum(a, b)
console.log(a); // 10
console.log(b); // 1


console.log({} + []) // [object Object]
console.log([] + {}) // [object Object]

function C1(name){
    this.name = name
}
class C2{
    constructor(name) {
        this.name = name
    }
}

const c1test = new C1('ck')
const c2test = new C2('ck')
console.log(c1test.name)
console.log(c2test.name)


new Promise(resolve => {
    console.log("new Promise(macro task 1)");
    resolve();
}).then(() => {
    console.log("micro task 1");
    setTimeout(() => {
        console.log("macro task 3");
    }, 500);
});

setTimeout(() => {
    console.log("macro task 2");
}, 1000);

console.log("Task queue");

/*
new Promise(macro task 1)
* Task queue
micro task 1
// 如果时间一样的话， 那么， 2应该在3前面， 但是， 这里3时间更短， 先输出。
macro task 3
macro task 2
*
*
*
* */

